home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / dos / fs / sweep.1 < prev   
Encoding:
Text File  |  1989-11-13  |  17.2 KB  |  407 lines

  1. Path: wuarchive!texbell!texsun!newstop!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i202:  sweep - do commands on a directory tree
  5. Message-ID: <127774@sun.Eng.Sun.COM>
  6. Date: 13 Nov 89 01:55:37 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 396
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: utoddl@uncecs.edu (Todd M. Lewis)
  12. Posting-number: Volume 89, Issue 202
  13. Archive-name: dos/fs/sweep.1
  14.  
  15. SWEEP takes CLI commands and executes them in the current directory and
  16. in all directories below the current directory.
  17.   * The directory tree can be traversed top-down or bottom-up.
  18.   * Multiple commands can be issued.
  19.   * I/O streams can be redirected for SWEEP and the executed commands.
  20.  
  21. [uuencoded executable included. ..bob]
  22.  
  23. # This is a shell archive.
  24. # Remove anything above and including the cut line.
  25. # Then run the rest of the file through 'sh'.
  26. # Unpacked files will be owned by you and have default permissions.
  27. #----cut here-----cut here-----cut here-----cut here----#
  28. #!/bin/sh
  29. # shar: SHell ARchive
  30. # Run the following text through 'sh' to create:
  31. #    makefile
  32. #    sweep.c
  33. #    sweep.doc
  34. #    sweep.uu
  35. # This is archive 1 of a 1-part kit.
  36. # This archive created: Sun Nov 12 17:49:40 1989
  37. echo "extracting makefile"
  38. sed 's/^X//' << \SHAR_EOF > makefile
  39. Xsweep: sweep.o
  40. X    ln sweep.o -lc
  41. X
  42. Xsweep.o: sweep.c
  43. X    cc sweep.c
  44. X
  45. SHAR_EOF
  46. echo "extracting sweep.c"
  47. sed 's/^X//' << \SHAR_EOF > sweep.c
  48. X#include <stdio.h>
  49. X#include <exec/memory.h>
  50. X#include <functions.h>
  51. X#include <libraries/dos.h>
  52. X#include <libraries/dosextens.h>
  53. X
  54. X#define MAXCMDLEN  1024L
  55. X
  56. Xint   cmdTooLong;
  57. Xchar  cmdstr[MAXCMDLEN+1]; /* This is where we put the command string.      */
  58. Xchar  firstchar;           /* '-' Do a pre-order tree traversal.            */
  59. X                           /* '+' Do a post-order tree traversal. (default) */
  60. X                           /* '?' Show command usage.                       */
  61. X                           /* Otherwise, it is part of the command string.  */
  62. X
  63. X/* NOTE: dos.library is openned by the compiler startup code.
  64. X * _cli_parse() is called during program startup to parse the command line.
  65. X * We don't really want the command line parsed, so we replace it with our own
  66. X * parser.  This works with Manx C.  I don't know what you would do to
  67. X * make it work with Lattice.
  68. X */
  69. X
  70. Xvoid _cli_parse( pp, alen, aptr )
  71. X  struct Process *pp;               /* Program's process structure */
  72. X  long            alen;             /* Length of the command string */
  73. X  char           *aptr;             /* The command string itself */
  74. X  {
  75. X    long   i, j;
  76. X    char *p;
  77. X
  78. X    p         = aptr;
  79. X    firstchar = *p;
  80. X    j         = alen;
  81. X
  82. X    switch (*p) {
  83. X       case '-' :
  84. X       case '+' :
  85. X       case '?' : p += 1; j -= 1; break;
  86. X       default  : ;
  87. X       }
  88. X
  89. X    if ( alen < MAXCMDLEN ) {
  90. X         cmdTooLong = 0;
  91. X         for( i=0; i<j; i++)    /* Copy the pertinent parts of the command   */
  92. X             cmdstr[i] = p[i];  /* string to our buffer.  Make sure it fits. */
  93. X         cmdstr[i] = '\0';      /* Tack on a null char, just to be safe.     */
  94. X         }
  95. X       else
  96. X         cmdTooLong = 1;
  97. X
  98. X    }
  99. X
  100. X/*
  101. X * _wb_parse() is called by Manx startup. Since we are only running from
  102. X * the CLI, we can stub this out and reduce our program size.
  103. X */
  104. X
  105. Xvoid _wb_parse() { }
  106. X
  107. X
  108. Xvoid Syntax()
  109. X{
  110. X   printf("Sweep: Execute CLI command(s) in current directory and all\n"
  111. X          "       subdirectories.                           tml 11/89\n\n");
  112. X   printf("USAGE: SWEEP [+|-|?] cmd [ + \n cmd... ]\n\n"
  113. X          " '+'  Do a post-order (bottom up) tree traversal.  (default)\n"
  114. X          " '-'  Do a pre-order  (top  down) tree traversal.\n");
  115. X   printf(" '?'  Show command usage.  (this display)\n"
  116. X          " cmd  Command(s) you want executed in each directory.\n"
  117. X          "      Multiple commands can be issued as with the RUN command.\n");
  118. X   }
  119. X
  120. Xmain()
  121. X{
  122. X
  123. X    if (firstchar == '?') {
  124. X        Syntax();
  125. X        exit();
  126. X        }
  127. X
  128. X    doDir( "\0" );
  129. X    }
  130. X
  131. XdoDir( topDirName )
  132. X  char *topDirName;
  133. X  {
  134. X    struct FileLock *topLock, *tmpLock;
  135. X    struct FileInfoBlock *fib;
  136. X
  137. X
  138. X    /* Get a lock on the Current Directory */
  139. X    topLock = Lock( topDirName, ACCESS_READ );
  140. X
  141. X    if (topLock == NULL) {
  142. X        return();
  143. X        }
  144. X
  145. X    tmpLock = CurrentDir( topLock );
  146. X
  147. X    if (firstchar == '-')                /* Do a pre-order traversal. */
  148. X       Execute( cmdstr , 0L, Output() );
  149. X
  150. X    /* The FileInfoBlock structure has to be long-word alligned, so */
  151. X    /* we should use AllocMem to insure this condition is met.      */
  152. X
  153. X    fib = AllocMem( (long) sizeof( struct FileInfoBlock ), MEMF_PUBLIC );
  154. X
  155. X    if ( Examine( topLock, fib ) )  /* We know this is our mother dir, so */
  156. X                                    /* don't recurse on this one.         */
  157. X       while ( ExNext( topLock, fib) ) {
  158. X            if ( fib->fib_DirEntryType > 0 ) {      /* It's a directory */
  159. X                    doDir( fib->fib_FileName);
  160. X                    }
  161. X            };
  162. X
  163. X    if (firstchar != '-')                /* Do a Post-order traversal. */
  164. X       Execute( cmdstr , 0L, Output() );
  165. X
  166. X    FreeMem( fib, ( long ) sizeof ( struct FileInfoBlock ) );
  167. X
  168. X    topLock = CurrentDir( tmpLock );
  169. X
  170. X    UnLock( topLock );
  171. X    }
  172. X
  173. SHAR_EOF
  174. echo "extracting sweep.doc"
  175. sed 's/^X//' << \SHAR_EOF > sweep.doc
  176. XSWEEP is a CLI program which takes CLI commands and executes them in the
  177. Xcurrent directory and in all directories below the current directory.
  178. X
  179. X * The directory tree can be traversed in a pre-order (top down) fashion,
  180. X     or in a post-order (bottom up) fashion.  The latter is the default.
  181. X * Multiple commands can be issued in the same manner as with the RUN
  182. X     command.
  183. X * Input and output can be redirected for SWEEP as well as for the
  184. X     commands it executes.
  185. X
  186. XThe command syntax is:
  187. X    SWEEP [+|-|?] cmd [+ <return> cmd] ...
  188. X
  189. X    +   As the first character, '+' forces the directory tree to be
  190. X        traversed in a post-order (bottom up) fashion.  This is the
  191. X        default behavior, thus this parameter is useless.  In this mode,
  192. X        the command(s) will be executed in the lowest-level directories
  193. X        first.
  194. X
  195. X    -   forces the directory tree to be traversed in a pre-order (top down)
  196. X        fashion.  In this mode, the command(s) will be executed in the
  197. X        current directory first, then in the lower-level subdirectories.
  198. X
  199. X    ?   Causes the command syntax to be displayed.  In this case, any
  200. X        command is ignored.
  201. X
  202. XSome examples are in order.
  203. X
  204. X    Assume we have a disk with the following directory structure:
  205. X            Volume Name: MyDisk
  206. X                                          (root)
  207. X                                         /      \
  208. X                                      Test     Real
  209. X                                     /   \      /  \
  210. X                                   A      Q    S    T
  211. X                                 /   \
  212. X                                /     \
  213. X                              B         F
  214. X                            / | \     /   \
  215. X                           C  D  E   G     H
  216. X
  217. XSWEEP list           Assuming our current directory is A, the list
  218. X                     command will be executed in the following
  219. X                     directories: C D E B G H F A
  220. X
  221. XSWEEP -list          Assuming our current directory is A, the list
  222. X                     command will be executed in the following
  223. X                     directories: A B C D E F G H
  224. X
  225. XSWEEP s:spat protect #? -wed
  226. X                     This command would execute the spat script in all
  227. X                     the directories, making all the files and
  228. X                     directories read-only.
  229. X
  230. XSWEEP delete #?      With A as our current directory, this will delete
  231. X                     all the files in C, then in D, then E, then
  232. X                     go to B and delete all B's files, including
  233. X                     the now-empty directories C, D, and E.  It
  234. X                     then cleans out G, H, F (getting rid of the empty
  235. X                     G and H directories there) and finally back
  236. X                     to A to delete A's files and the two empty
  237. X                     directories B and F.  Use with care!
  238. X
  239. XSWEEP -delete #?     This command is just like the last one, but it
  240. X                     would not delete the directories that were
  241. X                     not empty from the start.  This is because the
  242. X                     directory tree is traversed top-down.  The delete
  243. X                     command in the A directory would remove all of A's
  244. X                     files, but because neither B nor F is empty, those
  245. X                     directories will remain.  All the files in and below
  246. X                     A, however, would be deleted, just like the last
  247. X                     example.
  248. X
  249. XSWEEP >ram:EditMe -echo "*N" +
  250. Xcd +
  251. Xlist
  252. X                     Assume the F directory is our current directory.
  253. X                     This command would execute the echo, cd, and
  254. X                     list commands in each directory from the current
  255. X                     directory on down, in top-down fashon, producing a
  256. X                     file on RAM: called "EditMe" which could be printed
  257. X                     to provide a reference of what was on the disk.
  258. X                     It would look like this:
  259. X
  260. XMyDisk:Test/A/F
  261. X.info                         76 ----rwed 30-Oct-89 21:12:37
  262. XG                            Dir ----rwed 15-Jul-89 15:27:56
  263. XH                            Dir ----rwed 24-Oct-88 19:04:37
  264. XSomeFile                     894 ----rwed 13-Aug-88 18:11:51
  265. XAnotherFile                  370 ----rwed 13-Aug-88 18:11:55
  266. XSomeFile.info                894 ----rwed 13-Aug-88 18:12:05
  267. X6 files - 2 directories - 9 blocks used
  268. X
  269. X
  270. XMyDisk:Test/A/F/G
  271. X.info                         16 ----rwed 24-Oct-88 19:48:47
  272. X1 file - 2 blocks used
  273. X
  274. X
  275. XMyDisk:Test/A/F/H
  276. XDirectory "current directory" is empty
  277. X
  278. X
  279. X
  280. X
  281. SHAR_EOF
  282. echo "extracting sweep.uu"
  283. sed 's/^X//' << \SHAR_EOF > sweep.uu
  284. X
  285. Xbegin 644 sweep
  286. XM```#\P`````````#``````````(```13```!J@````$```/I```$4T[Z`WI.4
  287. XM5?_T*VT`$/_T(&W_]!E0AF$K;0`,__@@;?_T$!!(@$C`8`Q2K?_T4ZW_^&`8+
  288. XM8!:0O````"MG[%6`9^B0O````!)GX&#H#*T```0```QL/$)L@EY"K?_\8!H@4
  289. XM+?_\(&W_]"(M__Q#[()@$[`(`!@`4JW__"`M__RPK?_X;=P@+?_\0>R"8$(P.
  290. XM"`!@!CE\``&"7DY=3G5.50``3EU.=4Y5``!(>@`@3KH$@EA/2'H`CDZZ!'A8I
  291. XM3TAZ`1U.N@1N6$].74YU4W=E97`Z($5X96-U=&4@0TQ)(&-O;6UA;F0H<RD@*
  292. XM:6X@8W5R<F5N="!D:7)E8W1O<GD@86YD(&%L;`H@("`@("`@<W5B9&ER96-T*
  293. XM;W)I97,N("`@("`@("`@("`@("`@("`@("`@("`@("`@=&UL(#$Q+S@Y"@H`S
  294. XM55-!1T4Z(%-71450(%LK?"U\/UT@8VUD(%L@*R`*(&-M9"XN+B!="@H@)RLG&
  295. XM("!$;R!A('!O<W0M;W)D97(@*&)O='1O;2!U<"D@=')E92!T<F%V97)S86PN@
  296. XM("`H9&5F875L="D*("<M)R`@1&\@82!P<F4M;W)D97(@("AT;W`@(&1O=VXI;
  297. XM('1R964@=')A=F5R<V%L+@H`("<_)R`@4VAO=R!C;VUM86YD('5S86=E+B`@L
  298. XM*'1H:7,@9&ES<&QA>2D*(&-M9"`@0V]M;6%N9"AS*2!Y;W4@=V%N="!E>&5C<
  299. XM=71E9"!I;B!E86-H(&1I<F5C=&]R>2X*("`@("`@375L=&EP;&4@8V]M;6%NN
  300. XM9',@8V%N(&)E(&ES<W5E9"!A<R!W:71H('1H92!254X@8V]M;6%N9"X*``!.(
  301. XM50``#"P`/X9A9@A.NOX:3KH+[DAZ``IA"%A/3EU.=0``3E7_]$AX__XO+0`(#
  302. XM3KH-R%!/*T#__$JM__QF!$Y=3G4O+?_\3KH-2EA/*T#_^`PL`"V&86843KH-&
  303. XMOB\`0J=(;()@3KH-6D_O``Q(>``!2'@!!$ZZ#?!03RM`__0O+?_T+RW__$ZZ;
  304. XM#2903TI`9RPO+?_T+RW__$ZZ#3103TI`9QH@;?_T2J@`!&\.(&W_]%"(+PA.8
  305. XMNO]L6$]@U`PL`"V&86<43KH-4B\`0J=(;()@3KH,[D_O``Q(>`$$+RW_]$ZZ$
  306. XM#:I03R\M__A.N@RF6$\K0/_\+RW__$ZZ#2I83V``_SYA<$/L@EI%[():M<EF7
  307. XM#C(\`1-K"'0`(L)1R?_\*4^&8BQX``0I3H9F2.>`@`@N``0!*6<02_H`"$ZNN
  308. XM_^)@!D*G\U].<T/Z`"!.KOYH*4"&:F8,+CP``X`'3J[_E&`$3KH`&E!/3G5D<
  309. XM;W,N;&EB<F%R>0!)^0``?_Y.=4Y5```O"DAY``$``#`L@D[!_``&+P!.N@S6M
  310. XM*4"&;E!/9A1"ITAY``$``$ZZ#)I03RYLAF).=2!LAFY":``$(&R&;C%\``$`/
  311. XM$"!LAFXQ?``!``H@;(9B("R&8I"H``10@"E`AG(@;(9R(+Q-04Y80J=.N@R*X
  312. XM)$!*J@"L6$]G+B\M``PO+0`(+PI.NON$.7P``89V(&R&;@!H@```!"!LAFX`J
  313. XM:(````I/[P`,8$)(:@!<3KH,F$AJ`%Q.N@QJ*4"&>"!LAGA*J``D4$]G$"!L-
  314. XMAG@B:``D+Q%.N@M"6$\O+(9X+PI.NOO`*6R&>(9\4$].N@MP(&R&;B"`3KH+G
  315. XMIB!LAFXA0``&9Q9(>`/M2'H`*DZZ"WX@;(9N(4``#%!/+RR&?#\LAH!.NOU>T
  316. XM0F=.N@E84$\D7TY=3G4J`$Y5``!(;0`,+RT`"$AZ!&!.N@"83^\`#$Y=3G5.@
  317. XM50``2.<(("1M``X,;0`$`!)F""!M``@H$&`<2FT`#&\,(&T`"'``,!`H`&`*F
  318. XM(&T`"#`02,`H`$)M`!)*;0`,;!!$;0`,2H1L"$2$.WP``0`2,BT`#$C!(`1.\
  319. XMN@.00>R``E.*%+```#(M``Q(P2`$3KH#AB@`9MI*;0`29P93BA2\`"T@"DS?3
  320. XM!!!.74YU3E7_(DCG"#`D;0`()FT`#$)M__HK;0`0__P@2U*+$!!(@#@`9P`"!
  321. XM[KA\`"5F``+,0BW_,#M\``'_^#M\`"#_]CM\)Q#_]"!+4HL0$$B`.`"P?``MV
  322. XM9@Y";?_X($M2BQ`02(`X`+A\`#!F$#M\`##_]B!+4HL0$$B`.`"X?``J9A@@<
  323. XM;?_\5*W__#M0__(@2U*+$!!(@#@`8#)";?_R8!PP+?_RP?P`"M!$D'P`,#M`6
  324. XM__(@2U*+$!!(@#@`,`120$'L@!0(,``"``!FU+A\`"YF6B!+4HL0$$B`.`"P.
  325. XM?``J9A@@;?_\5*W__#M0__0@2U*+$!!(@#@`8#)";?_T8!PP+?_TP?P`"M!$I
  326. XMD'P`,#M`__0@2U*+$!!(@#@`,`120$'L@!0(,``"``!FU#M\``+_\+A\`&QF[
  327. XM$B!+4HL0$$B`.``[?``$__!@$+A\`&AF"B!+4HL0$$B`.``P!$C`8'H[?``(=
  328. XM_^Y@%CM\``K_[F`..WP`$/_N8`8[?/_V_^X_+?_P2&W_,#\M_^XO+?_\3KK]F
  329. XMY"M`_^HP+?_P2,#1K?_\3^\`#&!<(&W__%BM__PB4"M)_^H@"4H99OR3P%.)_
  330. XM.TG_\&!*(&W__%2M__PX$$'M_R\K2/_J$(1@*)"\````8V?B4X!GDI"\````-
  331. XM"V<`_W)9@&>R58!G`/]P5X!G`/]R8,Q![?\PD>W_ZCM(__`P+?_PL&W_]&\&B
  332. XM.VW_]/_P2FW_^&=H(&W_Z@P0`"UG"B!M_^H,$``K9BX,;0`P__9F)E-M__(@#
  333. XM;?_J4JW_ZA`02(`_`$Z2L'S__U1/9@IP_TS?#!!.74YU8!8_+?_V3I*P?/__'
  334. XM5$]F!'#_8.12;?_Z,"W_\E-M__*P;?_P;MQ";?_N8"`@;?_J4JW_ZA`02(`_N
  335. XM`$Z2L'S__U1/9@1P_V"P4FW_[B!M_^I*$&<*,"W_[K!M__1MSC`M_^[1;?_Z9
  336. XM2FW_^&8H8!@_/``@3I*P?/__5$]F!G#_8`#_>%)M__HP+?_R4VW_\K!M__!N?
  337. XMVF`6/P1.DK!\__]43V8&</]@`/]24FW_^F``_0@P+?_Z8`#_0DCG2`!"A$J`G
  338. XM:@1$@%)$2H%J!D2!"D0``6$^2D1G`D2`3-\`$DJ`3G5(YT@`0H1*@&H$1(!2&
  339. XM1$J!:@)$@6$:(`%@V"\!81(@`2(?2H!.=2\!808B'TJ`3G5(YS``2$%*068@$
  340. XM2$$V`30`0D!(0(##(@!(0#("@L,P`4)!2$%,WP`,3G5(028!(@!"04A!2$!"#
  341. XM0'0/T(#3@;:!8@22@U)`4<K_\DS?``Q.=4Y5``!(;("L/RT`"$ZZ``A<3TY=.
  342. XM3G5.50``+P0X+0`(+RT`"C\$3KH`,+A\``I<3V8D(&T`"A`H``Q(@`@```=GS
  343. XM%#\\__\O+0`*3KH`]%Q/*!].74YU8/A.50``+PHD;0`*(%*QZ@`$91@P+0`(1
  344. XMP'P`_S\`+PI.N@#(7$\D7TY=3G4@4E*2$"T`"1"`2(#`?`#_8.A.50``+PI!S
  345. XM[("6)$@@2M7\````%B\(81!83T'L@DZUR&7J)%].74YU3E4``$CG""`D;0`(;
  346. XM>``@"F8*</],WP003EU.=4HJ``QG4`@J``(`#&<,/SS__R\*85(X`%Q/$"H`:
  347. XM#4B`/P!.N@4<B$`(*@`!``Q43V<*+RH`"$ZZ`BY83P@J``4`#&<2+RH`$DZZ'
  348. XM`L`O*@`23KH"%%!/0I)"J@`$0JH`"$(J``PP!&"03E7__DCG""`D;0`(0?K_(
  349. XM1BE(AH((*@`$``QG"G#_3-\$$$Y=3G4(*@`"``QG,"!2D>H`"#@(/P0O*@`(^
  350. XM$"H`#4B`/P!.N@*`L$103V<0".H`!``,0I)"J@`$</]@P`QM__\`#&80"*H`B
  351. XM`@`,0I)"J@`$<`!@J$JJ``AF""\*3KH`FEA/#&H``0`09BH;;0`-__\_/``!<
  352. XM2&W__Q`J``U(@#\`3KH"(K!\``%03V:@,"T`#&``_VHDJ@`(,"H`$$C`T*H`S
  353. XM""5```0(Z@`"``P@4E*2$"T`#1"`2(#`?`#_8`#_/DY5```O"D'L@)8D2$HJ`
  354. XM``QG&-7\````%D'L@DZUR&4(<``D7TY=3G5@XD*20JH`!$*J``@@"F#J3E7_*
  355. XM_"\*)&T`"#\\!`!.N@#`*T#__%1/9A@U?``!`!`@2M'\````#B5(``@D7TY=&
  356. XM3G4U?`0``!`(Z@`!``PE;?_\``@0*@`-2(`_`$ZZ`.)*0%1/9P8`*@"```Q@$
  357. XMSDY5``!(YP`P)&R"6F`4)E(@*@`$4(`O`"\*3KH$FE!/)$L@"F;H0JR"6DS?/
  358. XM#`!.74YU3E4``"\*0?K_QBE(AH9"IR`M``A0@"\`3KH$1"1`2H!03V8(<``DO
  359. XM7TY=3G4DK():)6T`"``$*4J"6B`*4(!@YDY5``!P`#`M``@O`&&R6$].74YUU
  360. XM3E4``$CG`#"7RR1L@EI@#B!M``A1B+'*9Q(F2B12(`IF[G#_3-\,`$Y=3G4@X
  361. XM"V<$)I)@!"E2@EH@*@`$4(`O`"\*3KH#['``4$]@V$Y5```O"C`M``C!_``&Q
  362. XM)$#5[(9N2FT`"&T.,"T`"+!L@DYL!$J29@XY?``"AHIP_R1?3EU.=3`M``C!Q
  363. XM_``&(&R&;B\P"`!.N@+X2H!83V<$<`%@`G``8-A.50``+RT`"$ZZ`I1*@%A/8
  364. XM9@Y.N@+,.4"&BG#_3EU.=7``8/A.50``2.<,(#@M``A.N@!P,`3!_``&)$#5+
  365. XM[(9N2D1M"KAL@DYL!$J29A`Y?``"AHIP_TS?!#!.74YU,"H`!,!\``-F"CE\@
  366. XM``6&BG#_8.1P`#`M``XO`"\M``HO$DZZ`JXJ`+"\_____T_O``QF#$ZZ`DPY.
  367. XM0(:*</]@N"`%8+1.5?_\2'@0`$*G3KH#!BM`__P(```,4$]G$DILAG9F""`MW
  368. XM__Q.74YU3KH`!G``8/1.50``2'@`!$AZ`!Q.N@(X+P!.N@)*/SP``4ZZ``Y/F
  369. XM[P`.3EU.=5Y#"@!.50``2JR&@F<&(&R&@DZ0/RT`"$ZZ``A43TY=3G5.5?_\)
  370. XM+P0P+0`(2,`K0/_\2JR&;F<H>`!@"C\$3KH`_E1/4D2X;().;?`P+().P?P`=
  371. XM!B\`+RR&;DZZ`CA03TJLAH9G!B!LAH9.D$JL@E1G"B\L@E1.N@&P6$]*K(:,@
  372. XM9P@@;(:,(*R&D$JLAI1G"B\LAI1.N@'(6$]*K(:89PHO+(:83KH!N%A/2JR&_
  373. XMG&<*+RR&G$ZZ`:A83TJLAJ!G"B\LAJ!.N@&86$\L>``$""X`!`$I9Q0O#4OZ`
  374. XM``I.KO_B*E]@!D*G\U].<TJLAGAF,$JLAJ1G*#`LAJA(P"\`+RR&I$ZZ`9`P:
  375. XM+(:`4D!(P.6`+P`O+(9\3KH!?$_O`!!@#DZZ`68O+(9X3KH!AEA/("W__"YL>
  376. XMAF).=2@?3EU.=4Y5``!(YPX@."T`"#`$P?P`!B1`U>R&;DI$;0JX;().;`1*0
  377. XMDF80.7P``H:*</],WP1P3EU.=0@J``<`!&8(+Q).N@`*6$]"DG``8.(B+P`$+
  378. XM+&R&:D[N_]Q.^@`"(B\`!"QLAFI.[O^"(B\`!"QLAFI.[O^X3OH``DSO``8`>
  379. XM!"QLAFI.[O^:3.\`#@`$+&R&:D[N_R),[P`&``0L;(9J3N[_E"QLAFI.[O_*\
  380. XM+&R&:D[N_WPB+P`$+&R&:D[N_RA.^@`"3.\`!@`$+&R&:D[N_ZQ,[P`&``0LN
  381. XM;(9J3N[_XD[Z``(L;(9J3N[_Q$[Z``(B+P`$+&R&:D[N_Z9,[P`.``0L;(9JG
  382. XM3N[_T$CG`01,[R"```PL;(9F3J[_E$S?((!.=2)O``0L;(9F3N[^8D[Z``),2
  383. XM[P`#``0L;(9F3N[_.B)O``0L;(9F3N[^VBQLAF9.[O]\3OH``B)O``0@+P`(-
  384. XM+&R&9D[N_RX@;P`$+&R&9D[N_HPB;P`$+&R&9D[N_H9,[P`#``0L;(9F3N[^C
  385. XMSB!O``0L;(9F3N[^@````^P````!`````0```_`````````#\@```^H```"6[
  386. XM,#$R,S0U-C<X.6%B8V1E9@```"`@("`@("`@(#`P,#`P("`@("`@("`@("`@R
  387. XM("`@("`@D$!`0$!`0$!`0$!`0$!`0`P,#`P,#`P,#`Q`0$!`0$!`"0D)"0D)^
  388. XM`0$!`0$!`0$!`0$!`0$!`0$!`0%`0$!`0$`*"@H*"@H"`@("`@("`@("`@("J
  389. XM`@("`@("`D!`0$`@``````````````````$``````0``````````````````P
  390. XM```!`0````$``````````````````````0(````!````````````````````'
  391. XM`````````````````````````````````````````````````````````````
  392. XM`````````````````````````````````````````````````````````````
  393. XM`````````````````````````````````````````````````````````````
  394. XM`````````````````````````````````````````````````````````````
  395. XM`````````````````````````````````````````````````````````````
  396. XM`````````````````````````````````````````````````````````````
  397. XM`````````````````````````````````````````````````````````````
  398. XM`````````````````````````````````````````````````````````````
  399. X?`````!0````````````````#\@```^L````!```#\@``M
  400. X``
  401. Xend
  402. Xsize 5116
  403. SHAR_EOF
  404. echo "End of archive 1 (of 1)"
  405. # if you want to concatenate archives, remove anything after this line
  406. exit
  407.